package part15;

/**
 * @author wcj
 * @Date 2021/5/30 16:27
 * @Version 1.0
 */
public class Part1525<T> {
    private T value;

    public Part1525(T val) {
        this.value = val;
    }

    public void setValue(T val) {
        value = val;
    }

    public T getValue() {
        return value;
    }

    @Override
    public boolean equals(Object object) {
        return value.equals(object);
    }

    /**
     * ? extends xxx 作为容器泛型参数的时候，不能向容器中添加任何元素，因为？标识为一种具体对象，且是xxx的导出类，那么编译器就无法判定其安全性
     * ? super xxx 表明?是xxx的基类，这个时候就可以向其中添加元素，因为从子类向基类转换，其类型是安全的
     *
     * @param args
     */
    public static void main(String[] args) {
        Part1525<Apple> applePart1525 = new Part1525<>(new Apple());
        Apple value = applePart1525.getValue();
        applePart1525.setValue(value);
        Part1525<? extends Fruit> part1525 = applePart1525;
        part1525.getValue();
    }
}
